#ifndef _BLUETOOTH_BOARD_H_
#define _BLUETOOTH_BOARD_H_

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <config.h>
#include <stdbool.h>

/* 定义蓝牙相关默认属性 */
// 默认蓝牙广播名称
#define DEFAULT_BLUETOOTN_RADIO_NAME                "YGS_LOCK"
// 蓝牙广播间隔时间 - 700ms(700 / 0.625 = 1120)
#define BLUETOOTH_BROADCAST_INTERVAL                (1120ul)
// 蓝牙 MTU 长度
#define MAX_BLUETOOTH_MTU_SIZE                      (BLE_BUFF_MAX_LEN - 4)

/**
 * @brief 获取蓝牙 MAC 地址
 *
 * @param pMacOut - MAC 编码
 */
extern void BluetoothGetMacAddress(uint8_t *pMacOut);

/**
 * @brief 更新蓝牙广播包间隔时间
 *
 * @return uint32_t - 广播包更新间隔时间
 */
extern uint32_t BluetoothGetUpdateRadioInterval(void);

/**
 * @brief 获取蓝牙连接状态
 * 
 * @return bool - 蓝牙连接状态(true: 已连接, false: 未连接)
 */
extern bool BluetoothGetConnectionStatus(void);

/**
 * @brief 蓝牙建立连接后得动作
 *
 */
extern void BluetoothPostConnectionActions(void);

/**
 * @brief 蓝牙断开连接后得动作
 *
 */
extern void BluetoothPostDisconnectionActions(void);

/**
 * @brief 获取设备类型
 *
 * @return uint8_t - 设备类型
 */
extern uint8_t BluetoothGetDeviceType(void);

/**
 * @brief 获取设备状态
 *
 * @return bool - 设备状态
 */
extern uint8_t BluetoothGetSystemStatus(void);

/**
 * @brief 获取蓝牙广播名称
 *
 * @param pNameOut - 蓝牙广播名称
 */
extern void BluetoothGetRadioName(void *pNameOut);

/**
 * @brief 获取协议栈版本号
 *
 * @return uint8_t - 协议栈版本号
 */
extern uint8_t BluetoothGetProtocolVersion(void);

/**
 * @brief 获取待推送事件标志位
 *
 * @return uint8_t - 待推送标志位
 */
extern uint8_t BluetoothGetEventToBeSendFlagBit(void);

/**
 * @brief 启动获取电池电量
 *
 */
extern void BluetoothStartGetBatteyLevel(void);

/**
 * @brief 获取当前电池电量百分比
 *
 * @return uint8_t - 电量百分比
 */
extern uint8_t BluetoothGetBatteyLevel(void);

/**
 * @brief 获取蓝牙连接超时时间
 *
 * @return uint16_t - 连接超时时间
 */
extern uint16_t BluetoothGetConnectTimeout(void);

/**
 * @brief 获取蓝牙广播间隔
 *
 * @return uint16_t - 蓝牙广播间隔
 */
extern uint16_t BluetoothGetBroadcastInterval(void);

/**
 * @brief 解析蓝牙推送报文
 *
 * @param pMessage      - 数据报文
 * @param SizeOfMessage - 报文数据长度
 */
extern void BluetoothAnalysisServerPushMessage(const uint8_t *pMessage, const uint16_t SizeOfMessage);

#endif
